# 下面的变量可以在shell 的环境变量里面指定。
# 也可以象下面这样在 Makefile 里面指定。

#####################################################
#
# Define Common src dir
#
#####################################################
SRCDIRS = src jServicesApi
EXCLUDE_SRCS = 
LIBS := 
LDFLAGS =-lm -lpthread -lstdc++ -lQt5Core
# 编译器参数                                        
CFLAGS = -rdynamic -O2 -Wall -Wno-unused -Wno-unknown-pragmas
#####################################################
#
# Define PLATFORM info
#
#####################################################
PROGRAMS = kvmapp
INCLUDES = -I /home/dingy/platform/project/sdk/sysroots/aarch64-xilinx-linux/usr/include/QtCore -I ./src -I ./jServicesApi
BUILD_DIR = /mnt/hgfs/D/tftpboot/
CROSS := aarch64-linux-gnu
CC = $(CROSS)-gcc -march=armv8-a+crc -mtune=cortex-a72.cortex-a53 --sysroot=/home/dingy/platform/project/sdk/sysroots/aarch64-xilinx-linux
STRIP = $(CROSS)-strip
AR = $(CROSS)-ar
LD = $(CC)
#####################下面的部分一般不用改动####################


# 生成依赖关系文件的参数    
DEPENDFLAG = -MM              
EXCLUDE_SRCS = 
CFLAGS := $(CFLAGS) $(INCLUDES)

Q=@
E=echo
ifeq ($(V), 1)
Q=
E=true
endif

%.o: %.c
	$(Q)$(CC) -c -o $@ $(CFLAGS) $<
	$(Q)$(E) "  CC " $<

%.o: %.cpp
	$(Q)$(CC) -c -o $@ $(CFLAGS) $<
	$(Q)$(E) "  CC " $<


# 从所有子目录中得到源代码的列表
ALLCSRCS = $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.c))
ALLCPPSRCS = $(foreach dir,$(SRCDIRS),$(wildcard $(dir)/*.cpp))

# 去除指定要排除的源文件
CSRCS = $(filter-out $(EXCLUDE_SRCS),$(ALLCSRCS))
CPPSRCS = $(filter-out $(EXCLUDE_SRCS),$(ALLCPPSRCS))


# 得到源代码对应的目标文件的列表
COBJS = $(CSRCS:.c=.o)
CPPOBJS = $(CPPSRCS:.cpp=.o)
OBJS = $(COBJS) $(CPPOBJS)

SAMPLE_SRCS = $(foreach dir,$(SAMPLE_DIRS),$(wildcard $(dir)/*.c))
SAMPLE_OBJS= $(SAMPLE_SRCS:.c=.o)

# 得到源代码对应的依赖关系文件的列表
# 依赖关系文件就是一个目标文件依赖于哪些头文件和源程序，依赖关系是自动生成的，并且用include语句包含在Makefile中
CDEPENDS = $(CSRCS:.c=.d) 
CPPDEPENDS = $(CPPSRCS:.cpp=.d)

# 指明默认目标是生成最终可执行文件。
#all:$(PROGRAM)
$(PROGRAMS): $(OBJS) $(LIBS)#这里把*.d也设置依赖,这样*.d文件修改也会重编译文件
	$(CC) -g -o $@ $(filter %.o ,$^) $(LDFLAGS) $(LIBS)
	@echo -e '\n'Succeed to build $(PROGRAMS) bin'\n'
	@mkdir -p $(BUILD_DIR) 
	@cp  -f $(PROGRAMS) $(BUILD_DIR)
	@echo -e '\n'Succeed copy $(PROGRAMS) to $(BUILD_DIR)'\n'

#生成依赖关系文件
$(CDEPENDS):%.d:%.c
	@$(CC) $(DEPENDFLAG) $(CFLAGS)  $< | \
	sed "s?\\(.*\\):?$(basename $<).o $(basename $<).d :?g" \
	> $@ || $(RM) $@

$(CPPDEPENDS):%.d:%.cpp
	@$(CC) $(DEPENDFLAG) $(CFLAGS)  $< | \
	sed "s?\\(.*\\):?$(basename $<).o $(basename $<).d :?g" \
	> $@ || $(RM) $@	


# 包含入依赖关系文件
-include $(CDEPENDS)
-include $(CPPDEPENDS)

######################### 自定义Make命令 #########################
# 删除生成的中间文件
.PHONY : clean
clean:
	$(Q)-rm $(OBJS) $(CDEPENDS) $(CPPDEPENDS) $(PROGRAMS)
	@echo "Clean finish."

# 安装文件
.PHONY : install	
install:

	


